home *** CD-ROM | disk | FTP | other *** search
- PROGRAM Show_Pic (Input, Output);
- { THIS PROGRAM READS A PC-DEMO .PIC FILE AND DISPLAYS IT }
- { BY DIRECTLY ADDRESSING THE SCREEN MEMORY }
-
- CONST
- Columns40 = 40; { COLUMNS FROM 1 TO 40 }
- Columns80 = 80; { COLUMNS FROM 1 TO 80 }
- LastLine = 25; { LINES FROM 1 TO 25 }
- MaxtString = 76; { MAX CHARS IN FILE NAME W/ PATH AND EXT }
- FourKB = 4000; { FILE SIZE OF 80-COLUMN PICTURE }
- TwoKB = 2000; { FILE SIZE OF 40-COLUMN PICTURE }
- PictureExt = '.PIC'; { FILE EXTENSION FOR FULL PICTURES }
- Null = ''; { NULL STRING }
-
- TYPE
- N_PictureType = ARRAY [1..LastLine, 1..Columns40] OF Integer;
- { ARRAY OF 40-COLUMN PICTURE DATA }
- W_PictureType = ARRAY [1..LastLine, 1..Columns80] OF Integer;
- { ARRAY OF 80-COLUMN PICTURE DATA }
-
- ParString = String [255];
- { VARIABLE LENGTH STRING PARAMETER TYPE }
-
- Result = { REGISTERS AND FLAGS }
- RECORD
- AX, BX, CX, DX, BP, SI, DI, DS, ES, Flags : integer;
- END; {RECORD}
-
- VAR
- I : Byte;
-
- Size : Integer;
-
- IName,
- OName : ParString;
-
- W_Picture : W_PictureType;
- { THE 80-COLUMN PICTURE }
-
- N_Picture : N_PictureType Absolute W_Picture;
- { THE 40-COLUMN PICTURE }
-
- N_InFile : FILE OF N_PictureType;
- W_InFile : FILE OF W_PictureType;
-
- TestFile : FILE OF Byte;
-
- N_InPtr : ^ N_PictureType;
- W_InPtr : ^ W_PictureType;
-
- Res : Result;
-
-
- FUNCTION Exist (FileName : ParString) : Boolean;
- { SEES IF A FILE EXISTS }
-
- VAR
- TestFile : FILE;
-
- BEGIN { Exist }
- Assign (TestFile, FileName);
-
- {$I-}
-
- Reset (TestFile);
-
- {$I+}
-
- Exist := (IOResult = 0);
- Close (TestFile);
- END; { Exist }
-
-
-
- PROCEDURE ConvertCase (VAR Strng : ParString);
- { CONVERTS STRINGS TO UPPER CASE }
-
- VAR
- I : Byte;
-
- BEGIN { ConvertCase }
- FOR I := 1 TO Length (Strng) DO
- Strng [I] := UpCase (Strng [I]);
- END; { ConvertCase }
-
-
- BEGIN { Show_Pic }
- Intr ($11, Res); { EQUIPMENT CHECK }
- IF Res.AX AND $30 = $30
- THEN { MONOCHROME }
- BEGIN
- N_InPtr := Ptr ($B000, 0);
- W_InPtr := Ptr ($B000, 0);
- END
- ELSE { COLOR }
- BEGIN
- N_InPtr := Ptr ($B800, 0);
- W_InPtr := Ptr ($B800, 0);
- END;
- IName := Null;
- IF ParamCount = 0
- THEN
- BEGIN
- Writeln ('Command must be of form: SHOW_PIC <name>');
- Exit;
- END;
- IName := ParamStr (1);
- Convertcase (IName);
- IName := IName + PictureExt;
- IF NOT Exist (IName)
- THEN
- BEGIN
- Writeln ('ERROR! File not found ' + IName);
- Exit;
- END;
- Assign (TestFile, IName);
- Reset (TestFile);
- Size := FileSize (TestFile);
- Close (TestFile);
- IF NOT ((Size = TwoKB) OR (Size = FourKB))
- THEN
- BEGIN
- Writeln ('ERROR! File wrong size.');
- Exit;
- END;
- Writeln ('Press any key to terminate...');
- Delay (2000);
- IF Size = TwoKB
- THEN
- BEGIN
- Assign (N_InFile, IName);
- Reset (N_InFile);
- Read (N_InFile, N_Picture);
- Close (N_InFile);
- TextMode (1); { SET TO 40 COLUMNS }
- N_InPtr ^ := N_Picture; { TRANSFER PICTURE DATA }
- END
- ELSE
- BEGIN
- Assign (W_InFile, IName);
- Reset (W_InFile);
- Read (W_InFile, W_Picture);
- Close (W_InFile);
- Port [$3D8] := $25; { VIDEO OFF - USE IF VIDEO "SNOWS" }
- W_InPtr ^ := W_Picture; { TRANSFER PICTURE DATA }
- Port [$3D8] := $2D; { VIDEO ON - USE IF VIDEO "SNOWS" }
- END;
- REPEAT
- UNTIL KeyPressed;
- TextMode (3); {RESET VIDEO }
- END. { Show_Pic }
-
-